package com.binance.assetservice.web.service;

import com.binance.assetservice.data.models.UserAssetItem;
import com.binance.assetservice.vo.request.AssetTransferRequest;
import com.binance.assetservice.vo.request.AsssetBalanceRequest;
import com.binance.assetservice.vo.request.DeductionFeeRequest;
import com.binance.assetservice.vo.request.DribbletAssetToBNBRequest;
import com.binance.assetservice.vo.request.FreezeAssetRequest;
import com.binance.assetservice.vo.request.GetOneUserAssetRequest;
import com.binance.assetservice.vo.request.GetUserAssetRequest;
import com.binance.assetservice.vo.request.SyncBalanceRequest;
import com.binance.assetservice.vo.request.UserAssetTransferBtcRequest;
import com.binance.assetservice.vo.request.UserAssetTransferDribbletBtcRequest;
import com.binance.assetservice.vo.request.UserNegativeAssetRequest;
import com.binance.assetservice.vo.request.WithdrawAssetFailRequest;
import com.binance.assetservice.vo.request.WithdrawAssetRequest;
import com.binance.assetservice.vo.request.WithdrawAssetSuccessRequest;
import com.binance.assetservice.vo.response.DribbletAssetToBNBResponse;
import com.binance.assetservice.vo.response.PagingResult;
import com.binance.assetservice.vo.response.UserAssetTransferBtcResponse;
import com.binance.assetservice.vo.response.UserAssetTransferDribbletBtcResponse;

public interface IUserAssetService {

    public PagingResult<UserAssetItem> getUserAsset(GetUserAssetRequest request) throws Exception;

    public UserAssetItem getOneUserAsset(GetOneUserAssetRequest request) throws Exception;

    // public void processTradeForBackfillTrades(ProcessTradeForBackfillTradesRequest request)
    // throws Exception;

    public void withdrawAsset(WithdrawAssetRequest request) throws Exception;

    public void withdrawAssetSuccess(WithdrawAssetSuccessRequest request) throws Exception;

    public void withdrawassetFail(WithdrawAssetFailRequest request) throws Exception;

    public void assetBalance(AsssetBalanceRequest request) throws Exception;

    public void freezeAsset(FreezeAssetRequest request) throws Exception;

    public void syncBalance(SyncBalanceRequest request) throws Exception;

    /**
     * 扣除手续费
     * 
     * @param request
     * @throws Exception
     */
    public void deductionFee(DeductionFeeRequest request) throws Exception;

    public UserAssetTransferBtcResponse userAssetTransferBtc(UserAssetTransferBtcRequest request) throws Exception;

    public DribbletAssetToBNBResponse dribbletAssetToBNB(DribbletAssetToBNBRequest request) throws Exception;

    public UserAssetTransferDribbletBtcResponse userAssetTransferDribbletBtc(
            UserAssetTransferDribbletBtcRequest request) throws Exception;


    /**
     * 资产转移
     * 
     * @param request
     * @throws Exception
     */
    public void assetTransfer(AssetTransferRequest request) throws Exception;
    
    public Integer getUserNegativeAsset(UserNegativeAssetRequest request);
}
